//该类的作用是管理物品的显示和交互，以便在游戏中方便地使用和管理各种物品。
using TMPro;
using UnityEngine;
using UnityEngine.UI;

public class Item : MonoBehaviour
{
    // 物品数据，由其他地方赋值
    public ItemData data;
    // 物品等级
    public int level;

    // 引用武器组件
    public Weapon weapon;

    // 物品图标
    Image icon;
    // 物品等级文本
    TextMeshProUGUI textLevel;

    public Gear gear;

    TextMeshProUGUI textName;
    TextMeshProUGUI textDesc;


    void Awake()
    {
        // 获取子物体中的Image组件，并将其赋值给icon变量
        icon = GetComponentsInChildren<Image>()[1];
        // 设置icon的sprite为物品的图标
        icon.sprite = data.itemIcon;

        // 获取子物体中的Text组件，并将其赋值给texts数组
        TextMeshProUGUI[] texts = GetComponentsInChildren<TextMeshProUGUI>();
        // 将texts数组中的第一个元素赋值给textLevel变量
        textLevel = texts[0];
        textName = texts[1];
        textDesc = texts[2];
        textName.text = data.itemName;
    }

    void OnEnable()
    {
        textLevel.text = "Lv." + (level + 1);
        switch (data.itemType)
        {
            case ItemData.ItemType.Melee:
            case ItemData.ItemType.Range:
                textDesc.text = string.Format(data.itemDesc, data.damages[level] * 100, data.counts[level]);
                break;
            case ItemData.ItemType.Glove:
            case ItemData.ItemType.Shoe:
                textDesc.text = string.Format(data.itemDesc, data.damages[level] * 100);
                break;
            default:
                textDesc.text = string.Format(data.itemDesc);
                break;
        }
    }

    // LateUpdate方法，在Update之后调用
    // 通常在此方法中更新UI
    // void LateUpdate()
    // {
    //     // 更新物品等级文本的内容
    //     textLevel.text = "Lv." + (level + 1);
    // }

    // 当点击物品时调用的方法
    public void OnClick()
    {
        // 根据物品类型进行不同的处理
        switch (data.itemType)
        {
            // 如果是近战武器或远程武器
            case ItemData.ItemType.Melee:
            case ItemData.ItemType.Range:
                // 这里可以添加处理近战武器和远程武器的逻辑
                if (level == 0)
                {
                    //开始给玩家一个武器
                    GameObject newWeapon = new GameObject();
                    weapon = newWeapon.AddComponent<Weapon>();
                    weapon.Init(data);
                }
                else
                {
                    float nextDamage = data.baseDamage;
                    int nextCount = 0;
                    nextDamage += data.baseDamage * data.damages[level];
                    nextCount += data.counts[level];
                    weapon.LevelUp(nextDamage, nextCount);
                }
                break;
            // 如果是手套/鞋子
            case ItemData.ItemType.Glove:
            case ItemData.ItemType.Shoe:
                // 这里可以添加处理手套/鞋子的逻辑
                if (level == 0)
                {
                    GameObject newGear = new GameObject();
                    gear = newGear.AddComponent<Gear>();
                    gear.Init(data);
                }
                else
                {
                    float nextRate = data.damages[level];
                    gear.LevelUp(nextRate);
                }
                break;
            // 如果是治疗物品
            case ItemData.ItemType.Heal:
                // 这里可以添加处理治疗物品的逻辑
                GameManager.instance.health = GameManager.instance.maxHealth;
                break;
        }

        // 物品等级加1
        level++;

        // 如果等级等于物品伤害数组的长度
        if (level == data.damages.Length && data.itemType != ItemData.ItemType.Heal)
        {
            // 获取Button组件，并将其交互状态设置为false，即不可交互
            GetComponent<Button>().interactable = false;
        }
    }
}
